/**************************************************************************
 **                                                                      **
 ** Copyright (C) 2018 Lukas Spies                                       **
 ** Contact: http://photoqt.org                                          **
 **                                                                      **
 ** This file is part of PhotoQt.                                        **
 **                                                                      **
 ** PhotoQt is free software: you can redistribute it and/or modify      **
 ** it under the terms of the GNU General Public License as published by **
 ** the Free Software Foundation, either version 2 of the License, or    **
 ** (at your option) any later version.                                  **
 **                                                                      **
 ** PhotoQt is distributed in the hope that it will be useful,           **
 ** but WITHOUT ANY WARRANTY; without even the implied warranty of       **
 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        **
 ** GNU General Public License for more details.                         **
 **                                                                      **
 ** You should have received a copy of the GNU General Public License    **
 ** along with PhotoQt. If not, see <http://www.gnu.org/licenses/>.      **
 **                                                                      **
 **************************************************************************/

#ifndef COMPOSESTRING_H
#define COMPOSESTRING_H

#include <QKeyEvent>
#include "../logger.h"

namespace ComposeString {

    static QString getModifiers(QKeyEvent *e) {

        QString modstring = "";

        if(e->modifiers() & Qt::ControlModifier)
            modstring += "Ctrl+";
        if(e->modifiers() & Qt::AltModifier)
            modstring += "Alt+";
        if(e->modifiers() & Qt::ShiftModifier)
            modstring += "Shift+";
        if(e->modifiers() & Qt::MetaModifier)
            modstring += "Meta+";
        if(e->modifiers() & Qt::KeypadModifier)
            modstring += "Keypad+";

        return modstring;

    }

    static QString compose(QKeyEvent *e) {

        QString combostring = getModifiers(e);

        switch(e->key()) {
        case Qt::Key_Escape:
            combostring += "Escape";
            break;
        case Qt::Key_Right:
            combostring += "Right";
            break;
        case Qt::Key_Left:
            combostring += "Left";
            break;
        case Qt::Key_Up:
            combostring += "Up";
            break;
        case Qt::Key_Down:
            combostring += "Down";
            break;
        case Qt::Key_Space:
            combostring += "Space";
            break;
        case Qt::Key_Delete:
            combostring += "Delete";
            break;
        case Qt::Key_Home:
            combostring += "Home";
            break;
        case Qt::Key_End:
            combostring += "End";
            break;
        case Qt::Key_PageUp:
            combostring += "Page Up";
            break;
        case Qt::Key_PageDown:
            combostring += "Page Down";
            break;
        case Qt::Key_Insert:
            combostring += "Insert";
            break;
        case Qt::Key_Tab:
            combostring += "Tab";
            break;
        case Qt::Key_Backtab:
            combostring += "Tab";
            break;
        case Qt::Key_Return:
            combostring += "Return";
            break;
        case Qt::Key_Enter:
            combostring += "Enter";
            break;
        case Qt::Key_Pause:
            combostring += "Pause";
            break;
        case Qt::Key_Print:
            combostring += "Print";
            break;
        case Qt::Key_SysReq:
            combostring += "SysReq";
            break;
        case Qt::Key_Clear:
            combostring += "Clear";
            break;
        case Qt::Key_CapsLock:
            combostring += "CapsLock";
            break;
        case Qt::Key_NumLock:
            combostring += "NumLock";
            break;
        case Qt::Key_ScrollLock:
            combostring += "ScrollLock";
            break;
        case Qt::Key_Super_L:
            combostring += "Super L";
            break;
        case Qt::Key_Super_R:
            combostring += "Super R";
            break;
        case Qt::Key_Menu:
            combostring += "Menu";
            break;
        case Qt::Key_Hyper_L:
            combostring += "Hyper L";
            break;
        case Qt::Key_Hyper_R:
            combostring += "Hyper R";
            break;
        case Qt::Key_Help:
            combostring += "Help";
            break;
        case Qt::Key_Direction_L:
            combostring += "Direction L";
            break;
        case Qt::Key_Direction_R:
            combostring += "Direction R";
            break;
        case Qt::Key_F1:
            combostring += "F1";
            break;
        case Qt::Key_F2:
            combostring += "F2";
            break;
        case Qt::Key_F3:
            combostring += "F3";
            break;
        case Qt::Key_F4:
            combostring += "F4";
            break;
        case Qt::Key_F5:
            combostring += "F5";
            break;
        case Qt::Key_F6:
            combostring += "F6";
            break;
        case Qt::Key_F7:
            combostring += "F7";
            break;
        case Qt::Key_F8:
            combostring += "F8";
            break;
        case Qt::Key_F9:
            combostring += "F9";
            break;
        case Qt::Key_F10:
            combostring += "F10";
            break;
        case Qt::Key_F11:
            combostring += "F11";
            break;
        case Qt::Key_F12:
            combostring += "F12";
            break;
        case Qt::Key_F13:
            combostring += "F13";
            break;
        case Qt::Key_F14:
            combostring += "F14";
            break;
        case Qt::Key_F15:
            combostring += "F15";
            break;
        case Qt::Key_F16:
            combostring += "F16";
            break;
        case Qt::Key_F17:
            combostring += "F17";
            break;
        case Qt::Key_F18:
            combostring += "F18";
            break;
        case Qt::Key_F19:
            combostring += "F19";
            break;
        case Qt::Key_F20:
            combostring += "F20";
            break;
        case Qt::Key_F21:
            combostring += "F21";
            break;
        case Qt::Key_F22:
            combostring += "F22";
            break;
        case Qt::Key_F23:
            combostring += "F23";
            break;
        case Qt::Key_F24:
            combostring += "F24";
            break;
        case Qt::Key_F25:
            combostring += "F25";
            break;
        case Qt::Key_F26:
            combostring += "F26";
            break;
        case Qt::Key_F27:
            combostring += "F27";
            break;
        case Qt::Key_F28:
            combostring += "F28";
            break;
        case Qt::Key_F29:
            combostring += "F29";
            break;
        case Qt::Key_F30:
            combostring += "F30";
            break;
        case Qt::Key_F31:
            combostring += "F31";
            break;
        case Qt::Key_F32:
            combostring += "F32";
            break;
        case Qt::Key_F33:
            combostring += "F33";
            break;
        case Qt::Key_F34:
            combostring += "F34";
            break;
        case Qt::Key_F35:
            combostring += "F35";
            break;
        default:
            if(e->text() != "")
                combostring += QKeySequence(e->key()).toString();

        }

        if(qgetenv("PHOTOQT_DEBUG") == "yes")
            LOG << CURDATE << "ComposeString::compose() - combostring = " << combostring.toStdString() << NL;

        return combostring;

    }

}


#endif // COMPOSESTRING_H
